package com.xm.queue.task2;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * 优点：内存连续访问，性能稳定；阻塞机制简单。
 * 缺点：单锁设计可能导致吞吐量较低；扩容需重新初始化。
 * 注意：初始化时需合理设置容量，避免频繁阻塞。
 */
public class TaskArrayBlockingQueue extends BaseQueue {
    private final BlockingQueue<ITask> taskQueue;

    public TaskArrayBlockingQueue(final boolean fair) {
        // 队列最大容量
        int CAPACITY = 1000;
        taskQueue = new ArrayBlockingQueue<>(CAPACITY, fair);
    }

    @Override
    public void put(ITask task) throws InterruptedException {
        this.taskQueue.put(task);
    }

    @Override
    public ITask take() throws InterruptedException {
        return this.taskQueue.take();
    }

    @Override
    public ITask poll() throws InterruptedException {
        return this.taskQueue.poll(1, TimeUnit.SECONDS);
    }

    @Override
    public int size() {
        return this.taskQueue.size();
    }
}
